﻿//Created by Action Script Viewer - http://www.buraks.com/asv
package reprise.utils {

    public class ColorUtil {

        public static function randomColor():int{
            return (((((Math.random() * 0xFF) << 16) | ((Math.random() * 0xFF) << 8)) | (Math.random() * 0xFF)));
        }
        public static function hexToHsb(_arg1:int):Object{
            var _local2:Object = number2rgbObject(_arg1);
            var _local3:int = _local2.r;
            var _local4:int = _local2.g;
            var _local5:int = _local2.b;
            var _local6:Object = {};
            _local6.b = Math.max(Math.max(_local3, _local4), _local5);
            var _local7:int = Math.min(_local3, Math.min(_local4, _local5));
            _local6.s = ((_local6.b)<=0) ? 0 : Math.round(((100 * (_local6.b - _local7)) / _local6.b));
            _local6.b = Math.round(((_local6.b / 0xFF) * 100));
            _local6.h = 0;
            if ((((_local3 == _local4)) && ((_local4 == _local5)))){
                _local6.h = 0;
            } else {
                if ((((_local3 >= _local4)) && ((_local4 >= _local5)))){
                    _local6.h = ((60 * (_local4 - _local5)) / (_local3 - _local5));
                } else {
                    if ((((_local4 >= _local3)) && ((_local3 >= _local5)))){
                        _local6.h = (60 + ((60 * (_local4 - _local3)) / (_local4 - _local5)));
                    } else {
                        if ((((_local4 >= _local5)) && ((_local5 >= _local3)))){
                            _local6.h = (120 + ((60 * (_local5 - _local3)) / (_local4 - _local3)));
                        } else {
                            if ((((_local5 >= _local4)) && ((_local4 >= _local3)))){
                                _local6.h = (180 + ((60 * (_local5 - _local4)) / (_local5 - _local3)));
                            } else {
                                if ((((_local5 >= _local3)) && ((_local3 >= _local4)))){
                                    _local6.h = (240 + ((60 * (_local3 - _local4)) / (_local5 - _local4)));
                                } else {
                                    if ((((_local3 >= _local5)) && ((_local5 >= _local4)))){
                                        _local6.h = (300 + ((60 * (_local3 - _local5)) / (_local3 - _local4)));
                                    } else {
                                        _local6.h = 0;
                                    };
                                };
                            };
                        };
                    };
                };
            };
            _local6.h = Math.round(_local6.h);
            return (_local6);
        }
        public static function number2rgbObject(_arg1:int):Object{
            var _local2:Object = {};
            _local2.r = (_arg1 >> 16);
            _local2.g = ((_arg1 ^ (_local2.r << 16)) >> 8);
            _local2.b = ((_arg1 ^ (_local2.r << 16)) ^ (_local2.g << 8));
            return (_local2);
        }
        public static function number2rgbArray(_arg1:int):Array{
            var _local2:Number = (_arg1 >> 16);
            var _local3:Number = ((_arg1 ^ (_local2 << 16)) >> 8);
            var _local4:Number = ((_arg1 ^ (_local2 << 16)) ^ (_local3 << 8));
            return (new Array(_local2, _local3, _local4));
        }
        public static function hex2rgb(_arg1:String):uint{
            if (_arg1.charAt(0) == "#"){
                return (parseInt(_arg1.substr(1), 16));
            };
            return (parseInt(_arg1, 16));
        }
        public static function hsbToHex(_arg1:int=0, _arg2:int=0, _arg3:int=0):int{
            var _local4:int;
            var _local5:int;
            var _local6:int;
            var _local7:int;
            _arg2 = ((100 - _arg2) / 100);
            _arg3 = ((100 - _arg3) / 100);
            if ((((((_arg1 > 300)) && ((_arg1 <= 360)))) || ((((_arg1 >= 0)) && ((_arg1 <= 60)))))){
                _local4 = 0xFF;
                _local5 = ((_arg1 / 60) * 0xFF);
                _local6 = (((360 - _arg1) / 60) * 0xFF);
            } else {
                if ((((_arg1 > 60)) && ((_arg1 <= 180)))){
                    _local4 = (((120 - _arg1) / 60) * 0xFF);
                    _local5 = 0xFF;
                    _local6 = (((_arg1 - 120) / 60) * 0xFF);
                } else {
                    _local4 = (((_arg1 - 240) / 60) * 0xFF);
                    _local5 = (((240 - _arg1) / 60) * 0xFF);
                    _local6 = 0xFF;
                };
            };
            if ((((_local4 > 0xFF)) || ((_local4 < 0)))){
                _local4 = 0;
            };
            if ((((_local5 > 0xFF)) || ((_local5 < 0)))){
                _local5 = 0;
            };
            if ((((_local6 > 0xFF)) || ((_local6 < 0)))){
                _local6 = 0;
            };
            _local4 = (_local4 + ((0xFF - _local4) * _arg2));
            _local5 = (_local5 + ((0xFF - _local5) * _arg2));
            _local6 = (_local6 + ((0xFF - _local6) * _arg2));
            _local4 = (_local4 - (_local4 * _arg3));
            _local5 = (_local5 - (_local5 * _arg3));
            _local6 = (_local6 - (_local6 * _arg3));
            _local4 = Math.round(_local4);
            _local5 = Math.round(_local5);
            _local6 = Math.round(_local6);
            _local7 = ((_local6 + (_local5 * 0x0100)) + (_local4 * 65536));
            return (_local7);
        }
        public static function transformColorByValue(_arg1:int, _arg2:int):int{
            var _local4:String;
            var _local5:int;
            var _local3:Object = number2rgbObject(_arg1);
            for (_local4 in _local3) {
                _local5 = int(_local3[_local4]);
                _local5 = (_local5 + _arg2);
                _local5 = Math.max(0, _local5);
                _local5 = Math.min(0xFF, _local5);
                _local3[_local4] = _local5;
            };
            return (int(rgbObject2Number(_local3)));
        }
        public static function contrastColorAgainstColor(_arg1:int):int{
            var _local2:Object = hexToHsb(_arg1);
            if (_local2.b <= 50){
                return (0xFFFFFF);
            };
            return (0);
        }
        public static function rgbObject2Number(_arg1:Object):int{
            return ((((_arg1.r << 16) | (_arg1.g << 8)) | _arg1.b));
        }

    }
}//package reprise.utils 
